`timescale 1ns / 1ps
/************************************************************\
 **  Copyright (c) 2022-2023 Gonsin, Inc.
 **  All Right Reserved.
 **  Author: http://www.anlogic.com/
 **  Description: reset_sync
 **  Rev 1.0
 **  Note:对异步输入的reset_i，进行clk_i同步处理，两级D触发器更加稳定
\************************************************************/

module reset_sync #(
parameter INITIALISE = 2'b11
)
(
input clk_i,
input enable_i,
input reset_i,
output reset_o
);

wire  reset_stage1_w;
wire  reset_stage2_w;

//带有时钟使能和异步置位的 D 触发器
FDPE #(
.INIT(INITIALISE[0])
) reset_sync1 (
.C(clk_i), 
.CE(enable_i),
.PRE(reset_i),
.D(1'b0),
.Q(reset_stage1_w) 
);

//带有时钟使能和异步置位的 D 触发器
FDPE #(
.INIT(INITIALISE[1])
) reset_sync2 (
.C(clk_i), 
.CE(enable_i),
.PRE(reset_i),
.D(reset_stage1_w),
.Q(reset_stage2_w) 
);

assign reset_o = reset_stage2_w;

endmodule
